<?php
session_start();
require_once '../model/Entidade.php';
class EntidadeDLO {

    private $entidades = array();
    private static $entidadeDLO;

    private function __construct() {
    }

    /**
     * @method entidadeDLO getInstance() para obter uma única instância do controlador
     * @return EntidadeDLO
     */
    public static function &getInstance() {
        if (!isset (self::$entidadeDLO)) {
            if (!isset ($_SESSION['entidadeDLO'])) {
                $_SESSION['entidadeDLO'] = serialize(new EntidadeDLO());
            }
            self::$entidadeDLO = unserialize($_SESSION['entidadeDLO']);
        }
        return self::$entidadeDLO;
    }

    public function cadastrar(&$descricao, &$nome) {
        $entidade = new Entidade();
        $entidade->setDescricao($descricao);
        $entidade->setNome($nome);
        $entidade->cadastrar();
    }

    public function &listar() {
        $result = &Entidade::listar();
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_entidade'] = &$result[$i]->getCod_entidade();
            $row['descricao'] = &$result[$i]->getDescricao();
            $row['nome'] = &$result[$i]->getNome();
            $resultado[$i] = &$row;
            unset ($row);
        }
        return $resultado;
    }

    public function excluir(&$cod_entidade) {
        $entidade = null;
        if (isset ($this->entidades[$cod_entidade])) {
            $entidade = &$this->entidades[$cod_entidade];
        } else {
            $entidade = &Entidade::consultar($cod_entidade);
            $this->entidades[$cod_entidade] = &$entidade;
            $_SESSION['entidadeDLO'] = serialize($this);
        }
        $entidade = &$this->entidades[$cod_entidade];
        if ($entidade->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $entidade->excluir();
        unset ($this->entidades[$cod_entidade]);
        $_SESSION['entidadeDLO'] = serialize($this);
    }

    public function alterar(&$cod_entidade, &$campo_id, &$campo_valor) {
        $entidade = null;
        if (isset ($this->entidades[$cod_entidade])) {
            $entidade = &$this->entidades[$cod_entidade];
        } else {
            $entidade = &Entidade::consultar($cod_entidade);
            $this->entidades[$cod_entidade] = &$entidade;
            $_SESSION['entidadeDLO'] = serialize($this);
        }
        if ($entidade->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $entidade->alterarCampo($campo_id, $campo_valor);
        $this->entidades[$i] = &$entidade;
        $_SESSION['entidadeDLO'] = serialize($this);
    }

    public function &consultar(&$cod_entidade) {
        $entidade = null;
        if (isset ($this->entidades[$cod_entidade])) {
            $entidade = &$this->entidades[$cod_entidade];
        } else {
            $entidade = &Entidade::consultar($cod_entidade);
            $this->entidades[$cod_entidade] = &$entidade;
            $_SESSION['entidadeDLO'] = serialize($this);
        }
        $row = array();
        $row['cod_entidade'] = &$entidade->getCod_entidade();
        $row['descricao'] = &$entidade->getDescricao();
        $row['nome'] = &$entidade->getNome();
        $row['vinculado'] = &$entidade->isVinculado();
        return $row;
    }
}
?>